<?php namespace Common\Model;
use Hdphp\Model\Model;
class Cate extends Model{
	//指定模型要操作的表名
	protected $table = 'category';
	//自动验证的数组
	protected $validate = array(
		//表单中的需要验证的内容在这写
		//array(字段名,验证方法,错误信息,验证条件,验证时间)
		array('cname','required','分类名称不能为空',3,3),
		array('ctitle','required','分类标题不能为空',3,3),
		array('csort','num:0,65535','分类排序必须为数字且是0-65535之间',3,3)
	);
	
	//自定义写入数据库方法，引用框架中的方法
	public function addData(){
		//调用在执行add方法之前，必须经过create方法进行验证，否则无法执行add方法，无法添加
		//用于检测用户提交的信息是否合法正确
		//create方法触发自动验证
		if($this->create()){
			//框架中的add方法
		 	$this->add();
			return true;
		}
	  	return false;
		//如果添加成功，返回一个true，方便在cateController控制器中用做判断，当执行成功时，执行给用户一个提示信息
	}
	//自定义更改数据库内容
	public function editData(){
		//调用在执行save方法之前，必须经过create方法进行验证，否则无法执行save方法，无法修改
		//用于检测用户提交的信息是否合法正确
		//create方法触发自动验证
		if($this->create()){
	//框架中的save方法，更改数据时是需要主键id的，如果此处没有写where条件，
	//则需要在用户表单写一个隐藏域，让其name为主键字段名称，value为主键值
			$this->save();
			return true;
		}
		return false;
		//如果修改成功，返回一个true，方便在cateController控制器中用做判断是否修改到数据库内容，当执行成功时，执行给用户一个提示信息
	}
	//获取分类用于在修改分类时不能修改为本身所属以及其子类所属
	public function getCate($cid){
		//先获取分类表中所有的数据
		$data = $this->get();
		//执行递归方法
		$cids = $this->getScate($data, $cid);
		//再压入本身
		$cids[] = $cid;
		$strcids = implode(',', $cids);
		return $this->where("cid NOT In({$strcids})")->get();
	}
	//递归获取子类
	public function getScate($data,$cid){
		$temp = array();
		foreach($data as $v){
			//判读数据中pid等于cid的则为当前数据的子类
			if($v['pid']==$cid){
				//将子类的cid存入到temp数组中
				$temp[] = $v['cid'];
				//执行递归时返回$temp，此时temp是其子类的cid，应将其放在一个数组内，将其所有子类保存在一个数组中返回出去，用数组组合
				//用静态变量如果不止一次用到此方法，那数据就会错乱了
				$temp = array_merge($temp,$this->getScate($data, $v['cid']));
			}	
		}
		//返回一个数组，调用此方法会得到此数组，将此数组中的内容分配给编辑页面
		return $temp;
	}
	
	
	
	
	
	
}







 ?>